package fr.toto.subtitles;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.TreeSet;

import com.kokotchy.betaSeriesAPI.model.SubtitleLanguage;

import fr.toto.comparators.SoutitreComparator;


public class SoutitreSet {

	private static final boolean DEBUG = true;
	private static TreeSet<Soutitre> s = new TreeSet<Soutitre>(new SoutitreComparator());

	public static void add(Soutitre st) {
		s.add(st);
	}

	public static synchronized void Save() {
		try {
			if (DEBUG) {
				System.out.println("Sauvegarde liste de soustitre");
			}
			ObjectOutputStream out = new ObjectOutputStream(
					new FileOutputStream(".triseries_save/soutitres.dat"));
			out.writeObject(s);
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static synchronized void Load() {
		try {
			ObjectInputStream in = new ObjectInputStream(new FileInputStream(
					".triseries_save/soutitres.dat"));
			@SuppressWarnings("unchecked")
			TreeSet<Object> list = (TreeSet<Object>) in.readObject(); 
			in.close();
			for(Object ob : list) {
				if((ob instanceof Soutitre)) {
					s.add((Soutitre) ob);
				}
				else {
					// permet de garder la compatibilité avec l'ancien fichier de soustitre
					if(ob instanceof triseries.Soutitre) {
						Soutitre Sub = ((triseries.Soutitre) ob).copy();
						s.add(Sub);
					} 
				}
			}
			
			if (DEBUG) {
				System.out.println("chargement liste de soustitre");
				for (Soutitre st : s) {
					System.out.println(" - " + st.toString());
				}
			}
		} catch (FileNotFoundException e) {
			s = new TreeSet<Soutitre>(new SoutitreComparator());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	public static synchronized Soutitre extraitSoutitre(String url,int se, int ep,SubtitleLanguage lang) {
		for(Soutitre soutitre:s) {
			if (soutitre.equals(url, se,  ep, lang)) {
				s.remove(soutitre);
				return soutitre;
			}
		}
		return null;
	}

	public static void remove(Soutitre soutitre) {
		s.remove(soutitre);
	}

	public static synchronized Object[] ListATraiter() {
		return s.toArray();
	}

}
